Micron Document
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| SparkN0de-git | SparkN0de |
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Node / ReticulumProjects / MeshChatX.git / files / tests / backend / test_safe_path_under_dir.py

Displaying Raw • Download


tests/backend/test_safe_path_under_dir.py 59c3a0c47e87e8db699d25b757bb7b599215ddbd (59c3a0c4) Text, 1.17 KB

T8b949e# SPDX-License-Identifier: 0BSD

Tff7b72import T7ee787os

Tff7b72from T7ee787meshchatxT7ee787.T7ee787srcT7ee787.T7ee787path_utils Tff7b72import Te6edf3safe_path_under_dir


Tff7b72def Td2a8fftest_safe_path_under_dir_accepts_basenameTb4b4b4(Te6edf3tmp_pathTb4b4b4)Tb4b4b4:
Te6edf3target Tff7b72= Te6edf3tmp_path Tff7b72/ Ta5d6ff"Ta5d6ffrec.opusTa5d6ff"
Te6edf3targetTff7b72.Td2a8ffwrite_bytesTb4b4b4(Ta5d6ffbTa5d6ff"Ta5d6ffxTa5d6ff"Tb4b4b4)
Te6edf3out Tff7b72= Te6edf3safe_path_under_dirTb4b4b4(Tffa657strTb4b4b4(Te6edf3tmp_pathTb4b4b4)Tb4b4b4, Ta5d6ff"Ta5d6ffrec.opusTa5d6ff"Tb4b4b4)
Tff7b72assert Te6edf3out Tff7b72== Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffrealpathTb4b4b4(Tffa657strTb4b4b4(Te6edf3targetTb4b4b4)Tb4b4b4)


Tff7b72def Td2a8fftest_safe_path_under_dir_collapses_traversal_to_basenameTb4b4b4(Te6edf3tmp_pathTb4b4b4)Tb4b4b4:
Te6edf3out Tff7b72= Te6edf3safe_path_under_dirTb4b4b4(Tffa657strTb4b4b4(Te6edf3tmp_pathTb4b4b4)Tb4b4b4, Ta5d6ff"Ta5d6ff../evil.opusTa5d6ff"Tb4b4b4)
Tff7b72assert Te6edf3out Tff7b72== Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffrealpathTb4b4b4(Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Tffa657strTb4b4b4(Te6edf3tmp_pathTb4b4b4)Tb4b4b4, Ta5d6ff"Ta5d6ffevil.opusTa5d6ff"Tb4b4b4)Tb4b4b4)


Tff7b72def Td2a8fftest_safe_path_under_dir_rejects_nul_and_dotTb4b4b4(Te6edf3tmp_pathTb4b4b4)Tb4b4b4:
Tff7b72assert Te6edf3safe_path_under_dirTb4b4b4(Tffa657strTb4b4b4(Te6edf3tmp_pathTb4b4b4)Tb4b4b4, Ta5d6ff"Ta5d6ffaTffea00\x00Ta5d6ffb.opusTa5d6ff"Tb4b4b4) Tff7b72is Tff7b72None
Tff7b72assert Te6edf3safe_path_under_dirTb4b4b4(Tffa657strTb4b4b4(Te6edf3tmp_pathTb4b4b4)Tb4b4b4, Ta5d6ff"Ta5d6ff..Ta5d6ff"Tb4b4b4) Tff7b72is Tff7b72None
Tff7b72assert Te6edf3safe_path_under_dirTb4b4b4(Tffa657strTb4b4b4(Te6edf3tmp_pathTb4b4b4)Tb4b4b4, Ta5d6ff"Ta5d6ff"Tb4b4b4) Tff7b72is Tff7b72None


Tff7b72def Td2a8fftest_safe_path_under_dir_rejects_symlink_escapeTb4b4b4(Te6edf3tmp_pathTb4b4b4)Tb4b4b4:
T8b949e"""Reject basename symlinks whose real path leaves the jail."""
Te6edf3outside Tff7b72= Te6edf3tmp_path Tff7b72/ Ta5d6ff"Ta5d6ffoutside.secretTa5d6ff"
Te6edf3outsideTff7b72.Td2a8ffwrite_bytesTb4b4b4(Ta5d6ffbTa5d6ff"Ta5d6ffsecretTa5d6ff"Tb4b4b4)
Te6edf3jail Tff7b72= Te6edf3tmp_path Tff7b72/ Ta5d6ff"Ta5d6ffjailTa5d6ff"
Te6edf3jailTff7b72.Td2a8ffmkdirTb4b4b4(Tb4b4b4)
Te6edf3link Tff7b72= Te6edf3jail Tff7b72/ Ta5d6ff"Ta5d6ffescape.opusTa5d6ff"
Te6edf3linkTff7b72.Td2a8ffsymlink_toTb4b4b4(Te6edf3outsideTb4b4b4)
Tff7b72assert Te6edf3safe_path_under_dirTb4b4b4(Tffa657strTb4b4b4(Te6edf3jailTb4b4b4)Tb4b4b4, Ta5d6ff"Ta5d6ffescape.opusTa5d6ff"Tb4b4b4) Tff7b72is Tff7b72None


──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────